
import java.util.Arrays;

public class Recursion {
    //实现一个方法 printArray, 以数组为参数, 循环访问数组中的每个元素, 打印每个元素的值.
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        printArray(arr);
    }
    //创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100
    public static void main7(String[] args) {
        int[] arr = new int[100];
        for (int i = 0; i < 100; i++) {
            arr[i] = i + 1;
        }
        String str=Arrays.toString(arr);
        System.out.println(str);
    }
    //递归求解汉诺塔问题

    /**
     *
     * @param n
     * @param p1 起始位置
     * @param p2 中转位置
     *  @param p3 终点位置
     */
    public static void houd(int n, char p1, char p2, char p3) {
        if (n == 1) {
            move(p1, p3);
            return;
        }
        houd(n - 1, p1, p3, p2);
        move(p1, p3);
        houd(n - 1, p2, p1, p3);
    }

    public static void main6(String[] args) {
        houd(2, 'A', 'B', 'C');
    }

    /**
     * @param p1 起始位置
     * @param p2 终点位置
     */
    public static void move(char p1, char p2) {
        System.out.println(p1 + "->" + p2);
    }
    //递归求斐波那契数列的第 N 项
    public static int fib(int n) {
        int f1 = 1;
        int f2 = 1;
        int f3 = 1;
        for (int i = 3; i <= n; i++) {
            f3 = fib(i - 1) + fib(i - 2);
        }
        return f3;
    }

    public static void main5(String[] args) {
        int ret = fib(8);
        System.out.println(ret);
    }
    //递归求和
    public static int add(int n) {
        if (n == 1) {
            return 1;
        }
        return n + add(n - 1);
    }

    public static void main3(String[] args) {
        int ret = add(10);
        System.out.println(ret);
    }
    //递归求 N 的阶乘
    public static int mul(int n) {
        if (n == 1) {
            return 1;
        }
        return n * mul(n - 1);
    }

    public static void main2(String[] args) {
        int ret = mul(5);
        System.out.println(ret);
    }

    public static int sum(int n){
        int sum=0;
        if(n<10){
            return n;
        }else{
            return n%10+sum(n/10);
        }
    }

    public static void main4(String[] args) {
        int ret=sum(123);
        System.out.println(ret);
    }
    public static void print(int n) {
        if (n < 10) {
            System.out.println(n);
            return;
        } else {
            print(n/10);
            System.out.println(n%10);
        }
    }
    public static void main1(String[] args) {
        print(123);

    }
}